package com.glela.platform.service;

import java.util.List;

import com.glela.platform.model.UserJournal;
import com.glela.platform.model.UserMoney;
import com.glela.platform.model.UserPointJournal;

/**
 * 用户余额服务类
 * @author gaoweiqi
 * @date 2017年8月21日 12:44:05
 */
public interface UserMoneyService{
	/**
	 * <dl>
	 * <dt>用户钱包记录</dt>
	 * </dl>
	 * @param userId
	 * @return List<UserMoney>
	 * @author zls
	 * @date 2017年8月25日 下午4:59:04
	 */
	public List<UserMoney> selectUserMoney(long userId);

	/**
	 * <dl>
	 * <dt>增加冻结</dt>
	 * </dl>
	 * @param userId 用户id 
	 * @param freezeMoney 冻结金额
	 * @param int  type
	 * @return int 消息数
	 * @author gwq
	 * @date 2017年8月21日 下午2:14:21
	 */
	public int freezeUserMoneyAndType(Long userId,int freezeMoney,int type);
	/**
	 * <dl>
	 * <dt>处理余额付、妆币事务,返还用户的积分和余额付</dt>
	 * </dl>
	 * @param userId 用户id 
	 * @param PointMoney 妆币(为0不处理)
	 * @param balanceMoney 余额付(为0不处理)
	 * @param cashMoneyBusinessType 妆币类型和
	 * @param balanceMoneyBusinessType 余额付类型
	 * @param sourceID 源ID(不为空) afterSaleID
	 * @param sourceID 源ID(不为空) afterSaleID
	 * @param orderSn  
	 * @return int 消息数(返回0失败)
	 * @author gwq
	 * @date 2017年8月22日 下午2:14:21
	 */
	public int refundUserMoneyAndPointByAfterSaleSourceID(Long userId,Integer PointMoney,int PointMoneyBusinessType,
			Integer balanceMoney,int balanceMoneyBusinessType,Long sourceID,Integer StoreId);
	/**
	 * <dl>
	 * <dt>取消订单时 返还用户的积分和余额付</dt>
	 * </dl>
	 * @param userId 用户id 
	 * @param PointMoney 妆币(为0不处理)
	 * @param cashMoneyBusinessType 妆币类型
	 * @param balanceMoney 余额付(为0不处理)
	 * @param balanceMoneyBusinessType 余额付类型
	 * @param orderObjectID 源ID(不为空) 
	 * @return int 消息数(返回0失败)
	 * @author gwq
	 * @date 2017年8月24日 下午2:14:21
	 */
	public int refundUserMoneyAndPointByorderObjectID(Long userId,Integer PointMoney,int PointMoneyBusinessType,
			Integer balanceMoney,int balanceMoneyBusinessType,Long orderObjectID);

	/**
	 * <dl>
	 * <dt>批量增加账户的余额</dt>
	 * </dl>
	 * @param userJournalList 
	 * @return int
	 * @author gwq
	 */
	public int  batchUpdateMoneyWithJournal(List<UserJournal> userJournalList);

	/**
	 * <dl>
	 * <dt>批量增加账户的妆币</dt>
	 * </dl>
	 * @param userPointJournalList
	 * @return int
	 * @author gaoweiqi
	 * @date 2017年8月16日 12:44:05
	 */
	public int batchUpdatePointWithJournal(
			List<UserPointJournal> userPointJournalList);

	/**
	 * <dl>
	 * <dt>扣减可用</dt>
	 * </dl>
	 * @param id 帐号id
	 * @param userId 用户id
	 * @param normalAmount 扣减可用金额
	 * @return boolean 是否成功
	 * @author zls
	 * @date 2017年9月5日 下午12:09:16
	 */
	boolean updateSubNormalAmount(long id, Long userId, long normalAmount);

	/**
	 * <dl>
	 * <dt>冻结用户金额</dt>
	 * </dl>
	 * @param id 帐号ID
	 * @param userId 用户ID
	 * @param freezeAmount 冻结金额
	 * @return boolean 是否冻结成功
	 * @author zls
	 * @date 2017年8月31日 下午5:28:07
	 */
	boolean updateFreezeAmount(long id, long userId, long freezeAmount);

	/**
	 * <dl>
	 * <dt>扣减冻结</dt>
	 * </dl>
	 * @param id 帐号id
	 * @param userId 用户ID
	 * @param frozenAmount 扣减冻结金额
	 * @return boolean 是否成功
	 * @author zls
	 * @date 2017年9月5日 下午3:21:31
	 */
	boolean updateSubFrozenAmount(long id, Long userId, Integer frozenAmount);

	/**
	 * <dl>
	 * <dt>释放冻结金额</dt>
	 * <dd>减冻结，加可用</dd>
	 * </dl>
	 * @param id 帐号id
	 * @param userId 用户ID
	 * @param releaseFreezeAmount 要释放的冻结金额
	 * @return boolean 是否释放成功
	 * @author zls
	 * @date 2017年9月6日 下午3:20:23
	 */
	boolean updateReleaseFreezeAmount(long id, Long userId, Integer releaseFreezeAmount);
	
	/**
	* **********************************************
	* @Title: checkExistUserMoney 
	* @Description: 检查c_user_money表是否存在
	* @param @param userId 
	* @return void
	* @throws	
	* @author NingChongQing	
	* @date 2017年9月20日 上午10:58:26 
	* **********************************************
	 */
	void checkExistUserMoney(long userId);
}
